package com.itheima.d6_object_stream;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

/**
 * 目标：掌握对象字节输出流的使用：序列化对象。
 *
 * 类名：ObjectOutPutStream
 *
 * 方法：writeObject(对象)
 *
 * 条件：对象的类型要实现Serializable
 */
public class Test1ObjectOutputStream {
    public static void main(String[] args) {

        //        try (
//                // 2、创建一个对象字节输出流包装原始的字节 输出流。
//                ObjectOutputStream oos =
//                        new ObjectOutputStream(new FileOutputStream("io-app2/src/itheima11out.txt"));
//                ){
//            // 1、创建一个Java对象。
//            User u = new User("admin", "张三", 32, "666888xyz");
//
//            // 3、序列化对象到文件中去
//            oos.writeObject(u);
//            System.out.println("序列化对象成功！！");
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }


        //前提：类型必须要实现Serializable接口
        User user1 = new User("兮", "小兮", 18, "123");
        User user2 = new User("兮", "小兮", 18, "123");
        User user3 = new User("兮", "小兮", 18, "123");
        //把User对象保存到user.obj文件中去

        ArrayList<User> users = new ArrayList<>(); //Arraylist自带序列化操作
        users.add(user1);
        users.add(user2);
        users.add(user3);

        //1、创建流对象
        try (FileOutputStream fos = new FileOutputStream("day10io-app2/file2/user.obj");
             ObjectOutputStream oos = new ObjectOutputStream(fos);
        ) {

//            //2、调用writeObject方法
//            oos.writeObject(user1);
//            oos.writeObject(user2);
//            oos.writeObject(user3);

            //序列化集合对象
            oos.writeObject(users);

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
